home *** CD-ROM | disk | FTP | other *** search
- CODE SEGMENT PARA PUBLIC
- ASSUME CS:CODE,DS:CODE,ES:CODE
- ORG 100H
- START PROC NEAR
- JMP SHORT INIT
- BUFFER DB 100 DUP(0)
- BUFEND LABEL BYTE
- BUFLEN EQU OFFSET(BUFEND-BUFFER)
- BUFPTR1 DW 0
- BUFPTR2 DW 0
- INIT: MOV SI,36
- MOV DI,OFFSET OLDINT
- MOV AX,0
- MOV DS,AX
- MOVSW
- MOVSW
- PUSH DS
- PUSH ES
- POP DS
- POP ES
- MOV DI,36
- CLI
- MOV AX,OFFSET KBINT
- STOSW
- MOV AX,CS
- STOSW
- STI
- PUSH DS
- POP ES
- MOV AH,9
- MOV DX,OFFSET EXTMSG
- INT 21H
- REPEAT: CALL KBGET
- CMP AL,1
- JNZ REPEAT
- CALL KBGET
- CMP AL,1
- JNZ REPEAT
- REPEAT2: CALL KBGET
- CMP AL,81H
- JNZ REPEAT2
- MOV SI,OFFSET OLDINT
- MOV DI,36
- MOV AX,0
- MOV ES,AX
- CLI
- MOVSW
- MOVSW
- STI
- PUSH DS
- POP ES
- RET
- OLDINT DD 0
- EXTMSG: DB 'Hold down ESC key to end program',13,10,'$'
- KBGET: CLI
- MOV BX,BUFPTR1
- CMP BX,BUFPTR2
- JNZ KBGET2
- STI
- JMP KBGET
- KBGET2: MOV AL,[BUFFER+BX]
- INC BX
- CMP BX,BUFLEN
- JC KBGET3
- SUB BX,BX
- KBGET3: MOV BUFPTR1,BX
- STI
- PUSH AX
- MOV CL,4
- SHR AL,CL
- CALL HEX1
- POP AX
- PUSH AX
- AND AL,15
- CALL HEX1
- POP AX
- CRLF: PUSH AX
- MOV DL,13
- CALL HEX2
- POP AX
- RET
- HEX1: ADD AL,90H
- DAA
- ADC AL,40H
- DAA
- MOV DL,AL
- HEX2: MOV AH,2
- INT 21H
- RET
- ASSUME DS:NOTHING
- KBINT: PUSH BX
- PUSH AX
- IN AL,60H
- PUSH AX
- IN AL,61H
- OR AL,80H
- OUT 61H,AL
- AND AL,7FH
- OUT 61H,AL
- POP AX
- MOV BX,BUFPTR2
- MOV [BUFFER+BX],AL
- INC BX
- CMP BX,BUFLEN
- JC KBINT3
- SUB BX,BX
- KBINT3: CMP BX,BUFPTR1
- JZ KBINT2
- MOV BUFPTR2,BX
- KBINT2: MOV AL,20H
- OUT 20H,AL
- POP AX
- POP BX
- IRET
- START ENDP
- CODE ENDS
- END START
- R1
- JZ KBINT2
- MOV BUFPTR2,BX
- KBINT2: MOV AL,20H
- OUT 20H,AL
- POP AX
- POP BX
- IRET
- START